package pp.gateway.application.user.login.api.Impl;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.redisson.misc.LogHelper;
import org.springframework.stereotype.Component;
import pp.gateway.application.user.login.param.LoginByAccountParam;
import pp.gateway.application.user.login.param.LogoutParam;
import pp.gateway.application.user.login.param.UserRegisterParam;
import pp.infrastructure.exception.PPException;
import pp.infrastructure.exception.PPExceptionInfo;

@Component
@Slf4j
public class LoginServiceCheckHelper {

    public void checkLoginByAccountParam(LoginByAccountParam input) {
        if (input.getAccount() == null || input.getAccount().isEmpty() || input.getPwd() == null || input.getPwd().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName()
                    , "登录账号或密码为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("登录账号密码不能为空");
        }
//        if(input.getVerifyCodeId() == null || input.getVerifyCode() == null || input.getVerifyCode().isEmpty()) {
//            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName()
//                    , "登录验证码为空，操作失败; 参数: input = " + JSON.toJSONString(input));
//            throw new PPException(PPExceptionInfo.GENERIC_SYSTEM_PARAM_CANNOT_NULL);
//        }
    }


    public void checkLogOutParam(LogoutParam input) {
        if (input == null) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "退出登录相关参数为空，操作失败");
            throw new PPException(PPExceptionInfo.GENERIC_SYSTEM_PARAM_CANNOT_NULL);
        }

        if (input.getAccount() == null || input.getAccount().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "退出登录的账号为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("退出登录的账号不能为空");
        }

        if (input.getToken() == null || input.getToken().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "退出登录账号的token为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("退出登录账号的token不能为空");
        }
    }

    public void checkUserRegisterParam(UserRegisterParam input) {
        if (input == null) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "注册相关参数为空，操作失败");
            throw new PPException(PPExceptionInfo.GENERIC_SYSTEM_PARAM_CANNOT_NULL);
        }

        if (input.getAccount() == null || input.getAccount().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "注册账号为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("注册的账号不能为空");
        }

        if (input.getPwd() == null || input.getPwd().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "注册的密码为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("注册的密码不能为空");
        }
        if (input.getTelephone() == null || input.getTelephone().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "注册的电话为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("注册的电话不能为空");
        }
        if (input.getName() == null || input.getName().isEmpty()) {
            log.error("{}.{} --> {};", this.getClass().getName(), new Object(){}.getClass().getEnclosingMethod().getName(),
                    "注册的用户名为空，操作失败; 参数: input = " + JSON.toJSONString(input));
            throw new PPException("注册的用户名不能为空");
        }
    }
}
